Fix and turn back on unat checking in fast paths
authordjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Tue, 19 Jul 2005 00:44:14 +0000 (17:44 -0700)
committerdjm@kirby.fc.hp.com <djm@kirby.fc.hp.com>
Tue, 19 Jul 2005 00:44:14 +0000 (17:44 -0700)
xen/arch/ia64/hyperprivop.S
xen/include/asm-ia64/xensystem.h

index 57b7892fd6af431b90e32613e2ed20bd6e8e2a8e..7c6d0146f9539eb2f529f383f1da4463e03963b0 100644 (file)
@@ -28,7 +28,7 @@
 #endif
 
 // FIXME: turn off for now... fix zero'ing regs, should be bank1?
-//#define HANDLE_AR_UNAT
+#define HANDLE_AR_UNAT
 
 // FIXME: This is defined in include/asm-ia64/hw_irq.h but this
 // doesn't appear to be include'able from assembly?
@@ -457,14 +457,16 @@ GLOBAL_ENTRY(fast_tick_reflect)
        .mem.offset 8,0; st8.spill [r3]=r29,16 ;;
        .mem.offset 0,0; st8.spill [r2]=r30,16;
        .mem.offset 8,0; st8.spill [r3]=r31,16 ;;
-       movl r31=XSI_IPSR;;
-       bsw.0 ;;
-       mov r2=r30; mov r3=r29;;
 #ifdef HANDLE_AR_UNAT
        // bank0 regs have no NaT bit, so ensure they are NaT clean
-       mov r16=r0; mov r17=r0; mov r19=r0;
-       mov r21=r0; mov r22=r0; mov r23=r0;
+       mov r16=r0; mov r17=r0; mov r18=r0; mov r19=r0;
+       mov r20=r0; mov r21=r0; mov r22=r0; mov r23=r0;
        mov r24=r0; mov r25=r0; mov r26=r0; mov r27=r0;
+       mov r28=r0; mov r29=r0; mov r30=r0; movl r31=XSI_IPSR;;
+#endif
+       bsw.0 ;;
+       mov r2=r30; mov r3=r29;;
+#ifdef HANDLE_AR_UNAT
        mov ar.unat=r28;
 #endif
        adds r20=XSI_BANKNUM_OFS-XSI_PSR_IC_OFS,r18 ;;
@@ -608,14 +610,17 @@ ENTRY(fast_reflect)
        .mem.offset 8,0; st8.spill [r3]=r29,16 ;;
        .mem.offset 0,0; st8.spill [r2]=r30,16;
        .mem.offset 8,0; st8.spill [r3]=r31,16 ;;
+#ifdef HANDLE_AR_UNAT
+       // bank0 regs have no NaT bit, so ensure they are NaT clean
+       mov r16=r0; mov r17=r0; mov r18=r0; mov r19=r0;
+       mov r20=r0; mov r21=r0; mov r22=r0; mov r23=r0;
+       mov r24=r0; mov r25=r0; mov r26=r0; mov r27=r0;
+       mov r28=r0; mov r29=r0; mov r30=r0; movl r31=XSI_IPSR;;
+#endif
        movl r31=XSI_IPSR;;
        bsw.0 ;;
        mov r2=r30; mov r3=r29;;
 #ifdef HANDLE_AR_UNAT
-       // bank0 regs have no NaT bit, so ensure they are NaT clean
-       mov r16=r0; mov r17=r0; mov r19=r0;
-       mov r21=r0; mov r22=r0; mov r23=r0;
-       mov r24=r0; mov r25=r0; mov r26=r0; mov r27=r0;
        mov ar.unat=r28;
 #endif
        adds r20=XSI_BANKNUM_OFS-XSI_PSR_IC_OFS,r18 ;;
index 307778e09dacbd80a019dea2307462d5f6d38d9b..6ab57719bb50fcfb2ffac4b2ac0df8786e513f6e 100644 (file)
@@ -59,8 +59,8 @@ extern struct task_struct *vmx_ia64_switch_to (void *next_task);
        if (IA64_HAS_EXTRA_STATE(next))                                                          \
                ia64_load_extra(next);                                                           \
        /*ia64_psr(ia64_task_regs(next))->dfh = !ia64_is_local_fpu_owner(next);*/                        \
-       /* vcpu_set_next_timer(next);  TURN ME BACK ON */                                       \
        (last) = ia64_switch_to((next));                                                         \
+       vcpu_set_next_timer(current);                                                           \
 } while (0)
 #endif // CONFIG_VTI